<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="../../React/react.development.js"></script>
  <script src="../../React/react-dom.development.js"></script>
  <script src="../../React/babel.min.js"></script>
  <title>Document</title>
</head>

<body>
  <div id="app"></div>
  <script type="text/babel">
    // 组件  非组件定义 函数式组件定义
    // 非组件定义,而是一个封装函数返回一个虚拟DOM
    /*缺点:
    识别性不高,一般组件的调用时使用大写的标签调用<Title>
      不具备组件拥有的功能
      开发者工具也不会识别
      */
    // function title() {
    //   return <h1>非组件定义</h1>
    // }
    // ReactDOM.createRoot(document.getElementById('app')).render(title())
    // 函数式组件定义
    // 1.只要是组件名,都要大写
    // 2.在不使用hooks的时候,函数式组件被称作为简单组件,只能返回一段虚拟DOM
    // 3.组件的使用是使用标签 单标签和双标签都可以
    //在使用组件的时候发生了什么
    // 1.识别Title是一个组件调用,则去寻找Title组件定义 注意大写才是组件
    // 2.发现Title组件是函数式组件,则直接调用当前函数,拿到虚拟DOM进行渲染
    // 函数式组件嵌套 最外层被称做根组件
    // function Title() {
    //   return <h1>非组件定义</h1>
    // }
    // function Title2() {
    //   return <h2>非组件定义</h2>
    // }
    // // 根组件
    // function App() {
    //   return (
    //     <div>
    //       <Title/>
    //       <Title2/>
    //     </div>
    //   )
    // }
    // // <Title/> <Title></Title>  这两种写法都可以
    // ReactDOM.createRoot(document.getElementById('app')).render(<App />)
    // 
    /*
    类式组件的定义:
      - 声明一个类 继承 React.Component则可以声明一个类式组件
    类式组件使用的时候做了什么?
      -1. 找到Title组件,发现组件是类式组件
      -2.实例化当前的类,得到一个组件实例化对象,new出该类的实例 (App的实例)
      并通过该实例调用原型上的render方法
      - 在调用组件实例上的render方法返回值中得到虚拟DOM --> t.render()
  */
  </script>
</body>

</html>